package cn.smile.business.core;

import cn.smile.bean.dto.core.ResInfoDTO;
import cn.smile.bean.dto.core.ResTreeDTO;
import cn.smile.bean.entity.core.ResInfo;
import cn.smile.bean.form.core.res.ResAddForm;
import cn.smile.bean.form.core.res.ResQueryForm;
import cn.smile.bean.form.core.res.ResUpdateForm;
import cn.smile.commons.domain.IBaseService;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author smile-jt
 */
public interface IResService extends IBaseService<ResInfo> {

    /**
     * 新增res资源
     *
     * @param form 新增参数
     * @return 新增结果
     */
    Boolean addInfo(ResAddForm form);

    /**
     * 更新res资源
     *
     * @param form 更新参数
     * @return 更新结果
     */
    Boolean updateInfo(ResUpdateForm form);

    /**
     * 查询角色对应URI
     *
     * @param roleCodes 角色ID集合
     * @return 查询结果
     */
    Set<String> queryUriByRoleIds(List<String> roleCodes);

    /**
     * 查询菜单Code
     *
     * @param roleIds 角色ID集合
     * @return 菜单Code集合
     */
    Set<String> getMenuCodeByRole(List<String> roleIds);

    /**
     * 查询资源树
     *
     * @return 查询结果集合
     */
    List<ResTreeDTO> getResTree();

    /**
     * 查询角色对应资源Code
     *
     * @param roleIds 角色ID集合
     * @return 查询结果
     */
    Map<String, List<String>> getResCodeMap(List<String> roleIds);

    /**
     * 根据角色ID保存资源信息
     *
     * @param resCodes 资源Code集合
     * @param roleId   角色ID
     */
    void saveResByRole(List<String> resCodes, String roleId);

    /**
     * 分页查询菜单资源
     *
     * @param form 查询参数
     * @return 查询结果
     */
    IPage<ResInfoDTO> queryPage(ResQueryForm form);

    /**
     * 查询所有顶级菜单
     *
     * @return 查询结果集合
     */
    List<ResInfoDTO> queryAllTopMenu();

    /**
     * 删除资源
     *
     * @param resId 资源ID
     * @return 删除结果
     */
    Boolean delResByWeb(String resId);
}
